home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
prterr.zip
/
DRIVER.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-04
|
8KB
|
228 lines
/***************************************************************************/
/* */
/* driver.c - program to test the prttest() function */
/* */
/* Command line syntax: DRIVER [1|2 d] */
/* */
/* where: 1|2 is the printer port (1=LPT1) */
/* if none specified, default is LPT1 */
/* */
/* d enables "debug" mode - printer port status is */
/* displayed to the screen on errors */
/* */
/* */
/* Examples: DRIVER 1 d - print to LPT1, debug active */
/* DRIVER - print to LPT1, debug not active */
/* DRIVER 2 - print to LPT2, debug not active */
/* */
/***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> /* for clrscr() */
#include <ctype.h> /* for toupper() */
#include <bios.h> /* for bioskey() - see gethex() */
int port = 0; /* Printer port used - Default LPT1 */
int ptrstat; /* Status of line printer port */
int saveptrstat; /* Saved version for debug mode */
unsigned char debug; /* Used to trace printer problems */
unsigned char digit;
int prttest(int port); /* Function declaration */
void main(char argc,char **argv)
{
/*9 comment: ****************************************************************
*9 Handle the command line parms, if any.
****************************************************************************/
if ( argc > 1 )
{
if ( ((char)*argv[1] == '1') || ((char)*argv[1] == '2') )
{
port = (atoi(argv[1]))-1;
}
else
{
printf("\n\nImproper LPT port designation!\n\n");
printf("Invocation: %s [1|2 d] \n",argv[0]);
printf(" where 1=LPT1, 2=LPT2\n");
printf(" d - enables debug mode\n");
exit(2);
}
if ( argc == 3 )
{
debug = *argv[2];
}
}
/*9 comment: ****************************************************************
*9 Test the printer port to see if it's ready.
****************************************************************************/
while ( (ptrstat = (prttest(port))) != 0 )
{
clrscr();
printf("\n\n\n\n\n\n\n\n\n\n");
switch(ptrstat)
{
case 1:
{
printf(" Printer is off line! ");
break;
}
case 2:
{
printf(" Printer is out of paper! ");
break;
}
case 3:
{
printf(" Printer is powered off! ");
break;
}
case 4:
{
printf(" Printer is not attached! ");
break;
}
case 5:
{
printf(" Printer port is invalid! ");
printf("Try again with a valid port specification.\n");
if ( toupper(debug) == 'D' )
{
printf(" (ptrstat = %02X)\n",saveptrstat);
}
exit(2);
}
case 6:
{
printf(" Unknown printer problem! ");
break;
}
}
printf("Correct and press a key...");
/*9 comment: ****************************************************************
*9 If "debug" mode is active, display the printer port's status
****************************************************************************/
if ( toupper(debug) == 'D' )
{
printf(" (ptrstat = %02X)",saveptrstat);
}
while ( kbhit() )
{
getch();
}
digit = getch();
}
/*9 comment: ****************************************************************
*9 Print the message
****************************************************************************/
fprintf(stdprn,"This is a test message.\r\n");
}
/***************************** D I E B O L D ********************************
*
*1 FUNCTION: prttest
*
*2 SUMMARY: This function tests the printer port to see if it is ready
*
*3 INVOCATION: int prttest(int port)
*
*4 INPUTS: Port to be tested (0 = LPT1:, 1 = LPT2:)
*
*5 OUTPUTS: Returns 0 if printer is ready.
*5 1 if printer is off-line
*5 2 if printer is out of paper
*5 3 if printer is powered off
*5 4 if no printer is attached
*5 5 if printer port is unavailable
*5 6 if printer status is not recognized
*
*6 CAVEATS:
*
*7 AUTHOR: Brad Stephenson DATE: 04/07/90
*
*8 REVISION: 05/18/90 BSTE - Replaced int86() call with biosprint().
*8 05/29/90 BSTE - Added "debug" mode
*8 Added ability to check LPT2
*
****************************************************************************/
int prttest(int port)
{
int ptrstatval;
/*9 comment: ****************************************************************
*9 Check Int 17 return for specific known problem returns
****************************************************************************/
ptrstatval = biosprint( 2, 0x00, port );
/*9 comment: ****************************************************************
*9 If we are in debug mode, save the returned value.
****************************************************************************/
if ( toupper(debug) == 'D' )
{
saveptrstat = ptrstatval;
}
/*9 comment: ****************************************************************
*9 Based on the port status, return an appropriate value to the caller
****************************************************************************/
switch(ptrstatval)
{
case 0x90:
{
return(0); /* Printer ready and on-line */
}
case 0x18:
case 0x08:
{
return(1); /* Printer off-line */
}
case 0x28:
case 0x38:
{
return(2); /* Printer out of paper */
}
case 0x48:
case 0xC8:
{
return(3); /* Printer powered off */
}
case 0x30:
case 0xB8:
case 0xB0:
{
return(4); /* No printer attached */
}
case 0x10:
case 0x4A:
case 0x02:
{
return(5); /* Port selected is invalid */
}
default:
{
return(6); /* Unknown printer status */
}
}
} /* End of prttest() */